home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / coding / dsp / c30ug.exe / $LATICE.ASM < prev    next >
Assembly Source File  |  1988-03-26  |  3KB  |  86 lines

  1. ;**************************************************************
  2. ;  
  3. ;                 $latice.asm
  4. ;  
  5. ;                 staff
  6. ;  
  7. ;                 03-26-88
  8. ;  
  9. ;           (C) Texas Instruments Inc., 1992 
  10. ;  
  11. ;           Refer to the file 'license.txt' included with this 
  12. ;           this package for usage and license information. 
  13. ;  
  14. ;**************************************************************
  15. Example 40.  Lattice filter
  16. ;
  17. ;==============================================================================
  18. ;                        SUBROUTINE L A T I C E
  19. ;==============================================================================
  20. ; LATICE  == LATTICE FILTER (LPC FILTER - SYNTHESIS)
  21. ;
  22. ;
  23. ; TYPICAL CALLING SEQUENCE:
  24. ;
  25. ;       load    R2
  26. ;       load    AR0
  27. ;       load    AR1
  28. ;       load    RC
  29. ;       CALL    LATICE
  30. ;
  31. ;
  32. ; ARGUMENT ASSIGNMENTS:
  33. ;   argument | function
  34. ;   ---------+-----------------------
  35. ;   R2       | f(p,n) = e(n) = excitation
  36. ;   AR0      | address of filter coefficients (k(p))
  37. ;   AR1      | address of backward propagation values (b(p-1,n-1))
  38. ;   RC       | RC = p - 2
  39. ;
  40. ; REGISTERS USED AS INPUT: R2, AR0, AR1, RC
  41. ; REGISTERS MODIFIED: R0, R1, R2, R3, RS, RE, RC, AR0, AR1
  42. ; REGISTER CONTAINING RESULT: R2 (f(0,n))
  43. ;
  44. ; STACK USAGE: none
  45. ;
  46. ; PROGRAM SIZE: 12 words
  47. ;
  48. ; EXECUTION CYCLES: 13 + 5 * (p-1)
  49. ;
  50. ;==============================================================================
  51.     .global    LATICE
  52. ;
  53. ;
  54. LATICE  MPYF3   *AR0, *AR1, R0              ; k(p) * b(p-1,n-1) -> R0
  55.     SUBF3    R0,R2,R2            ; assume f(p,n) -> R2.
  56. ;                        ; f(p,n)-k(p)*b(p-1,n-1)
  57. ;                        ;  =f(p-1,n) -> R2
  58. ;
  59. ; 2 <= i <= p
  60. ;
  61.         RPTB    LOOP
  62.         MPYF3   *AR0,R2,R1                  ; k(i) * f(i-1,n) -> R1
  63.         MPYF3   *--AR0(1), *-AR1(1), R0     ; k(i-1) * b(i-1-1,n-1) -> R0
  64.         ADDF3   *AR1--(1), R1, R3           ; b(i-1,n-1) + k(i) * f(i-1,n)
  65. ;                        ; = b(i,n) -> R3
  66.         STF     R3, *+AR1(2)                ; b(i,n) -> b(i,n-1)
  67. LOOP    SUBF3   R0,R2,R2                    ; f(i-1,n)-k(i-1)*b(i-1-1,n-1)
  68. ;                                           ;  = f(i-1-1,n) -> R2
  69. ;
  70. ;
  71. ; i = 1 (cleanup)
  72. ;
  73.     MPYF3    *AR0, R2, R1            ; k(1) * f(0,n) -> R1
  74.     ADDF3    *AR1, R1, R3            ; b(0,n-1) + k(1) * f(0,n)
  75. ;                        ;    = b(1,n) -> R3    
  76.         STF     R3, *+AR1(1)                ; b(1,n) -> b(1,n-1)
  77. ||      STF     R2, *AR1                    ; f(0,n) -> b(0,n-1)
  78. ;
  79. ; return sequence
  80. ;
  81.         RETS                                ; return
  82. ;
  83. ; end
  84. ;
  85.     .end
  86.